package dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import models.ExercicioPadraoTreino;
import models.PadraoTreino;
import models.Treino;

public class DAOPadraoTreino {

//idPadraoTreino, nome, intensidade

	
	public Set<PadraoTreino> select() throws Exception {
		Set<PadraoTreino> objs = new HashSet<PadraoTreino>();
		
		try {

			String query = "SELECT idPadraoTreino, nome, intensidade FROM PadraoTreino";

			Statement statement = DAOConnection.getConnection().createStatement();

			ResultSet resultSet = statement.executeQuery(query);

			while(resultSet.next()) {
				PadraoTreino obj = new PadraoTreino();
				obj.idPadraoTreino = resultSet.getInt(1);
				obj.nome = resultSet.getString(2);
				obj.intensidade = resultSet.getString(3);
				objs.add(obj);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return objs; 
	}
	
	//retorna conjunto de treinos do aluno
	public Set<PadraoTreino> selectPadraoTreinoIntensidade(String intensidade) throws Exception {
		Set<PadraoTreino> objs = new HashSet<PadraoTreino>();
		
		try {

			String query = "SELECT idPadraoTreino, nome, intensidade FROM PadraoTreino WHERE instensidade = ? ORDER BY nome";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(query);
			ps.setString(1, intensidade);
			
			ResultSet resultSet = ps.executeQuery();

			while(resultSet.next()) {
				PadraoTreino obj = new PadraoTreino();
				obj.idPadraoTreino = resultSet.getInt(1);
				obj.nome = resultSet.getString(2);
				obj.intensidade = resultSet.getString(3);
				objs.add(obj);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return objs; 
	}
	

	public PadraoTreino select(int id) throws Exception {
		PadraoTreino obj = new PadraoTreino();
		try	{

			String query = "SELECT idPadraoTreino, nome, intensidade FROM PadraoTreino WHERE idTreino = ?";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(query);
			ps.setInt(1, id);
			
			ResultSet resultSet = ps.executeQuery();

			while(resultSet.next()) {
				obj.idPadraoTreino = resultSet.getInt(1);
				obj.nome= resultSet.getString(2);
				obj.intensidade = resultSet.getString(3);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return obj; 
	}
	
	
	public PadraoTreino select(PadraoTreino pt) throws Exception {
		PadraoTreino obj = new PadraoTreino();
		try	{

			String query = "SELECT idPadraoTreino, nome, intensidade FROM PadraoTreino WHERE nome = ? ORDER BY idPadraoTreino DESC";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(query);
			ps.setString(1, pt.nome);
			
			ResultSet resultSet = ps.executeQuery();

			if(resultSet.next()) {
				obj.idPadraoTreino = resultSet.getInt(1);
				obj.nome= resultSet.getString(2);
				obj.intensidade = resultSet.getString(3);
			}
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
		return obj; 
	}
	

	public void insert(PadraoTreino pt) throws Exception {
		try {
			String insert = "INSERT INTO PadraoTreino (nome, intensidade) VALUES(?, ?)";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(insert);
			ps.setString(1, pt.nome);
			ps.setString(2, pt.intensidade);

			ps.executeUpdate();
			
			//cadastra os exercícios do padrão de treino
			PadraoTreino pTreino = select(pt);
			DAOExercicioPadraoTreino dao = new DAOExercicioPadraoTreino();
			for (ExercicioPadraoTreino ept : pt.exercicio) {
				ept.idPadraoTreino = pTreino.idPadraoTreino;
				dao.insert(ept);
			}
			
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
	}

	public void update(PadraoTreino pt) throws Exception {
		try {

			String update = "UPDATE PadraoTreino SET nome = ?, intensidade = ? WHERE idPadraoTreino = ?";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(update);
			ps.setString(1, pt.nome);
			ps.setString(2, pt.intensidade);
			ps.setInt(3, pt.idPadraoTreino);
			
			ps.executeUpdate();
		} catch(SQLException e) {
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}

	}

	public void delete(PadraoTreino pt) throws Exception {
		try {

			DAOExercicioPadraoTreino dao = new DAOExercicioPadraoTreino();
			dao.delete(pt);
			
			String delete = "DELETE FROM PadraoTreino WHERE idPadraoTreino = ?";

			PreparedStatement ps = DAOConnection.getConnection().prepareStatement(delete);
			ps.setInt(1, pt.idPadraoTreino);

			ps.executeUpdate();
		} catch(SQLException e) {
			e.printStackTrace();
			throw new Exception();
		} finally {
			DAOConnection.closeConnection();
		}
	}

}